package com.sxf.redis.iredis;

import java.util.Collection;

/**
 * @description: SortedSet/sortedset工具类
 * @author: zhangyb@ccccit.com.cn
 * @date: 2021年1月5日 下午2:26:50
 */
public interface ISortedSetRedisUtils {

    /**
     * 添加元素
     * @param nameSpace
     * @param key
     * @param timeoutSeconds
     * @param values
     * @return
     */
    boolean addSortedSet(String nameSpace, String key, long timeoutSeconds, Object[] values);

    /**
     * 添加元素
     * @param key
     * @param timeoutSeconds
     * @param values
     * @return
     */
    default boolean addSortedSet(String key, long timeoutSeconds, Object[] values) {
        return addSortedSet(null, key, timeoutSeconds, values);
    }

    /**
     * 添加元素
     * @param nameSpace
     * @param key
     * @param timeoutSeconds
     * @param value
     * @return
     */
    default boolean addSortedSet(String nameSpace, String key, long timeoutSeconds, Object value) {
        return addSortedSet(nameSpace, key, timeoutSeconds, new Object[]{value});
    }

    /**
     * 添加元素
     * @param key
     * @param timeoutSeconds
     * @param value
     * @return
     */
    default boolean addSortedSet(String key, long timeoutSeconds, Object value) {
        return addSortedSet(null, key, timeoutSeconds, new Object[]{value});
    }

    /**
     * 删除元素
     * @param nameSpace
     * @param key
     * @param values
     * @return
     */
    boolean removeSortedSet(String nameSpace, String key, Object[] values);

    /**
     * 删除元素
     * @param key
     * @param values
     * @return
     */
    default boolean removeSortedSet(String key, Object[] values) {
        return removeSortedSet(null, key, values);
    }

    /**
     * 删除元素
     * @param nameSpace
     * @param key
     * @param value
     * @return
     */
    default boolean removeSortedSet(String nameSpace, String key, Object value) {
        return removeSortedSet(nameSpace, key, new Object[]{value});
    }

    /**
     * 删除元素
     * @param key
     * @param value
     * @return
     */
    default boolean removeSortedSet(String key, Object value) {
        return removeSortedSet(null, key, new Object[]{value});
    }

    /**
     * 清空
     * @param nameSpace
     * @param key
     */
    void clearSortedSet(String nameSpace, String key);

    /**
     * 清空
     * @param key
     */
    default void clearSortedSet(String key) {
        clearSortedSet(null, key);
    }

    /**
     * 获取大小
     * @param nameSpace
     * @param key
     * @return
     */
    int sizeSortedSet(String nameSpace, String key);

    /**
     * 获取大小
     * @param key
     * @return
     */
    default int sizeSortedSet(String key) {
        return sizeSortedSet(null, key);
    }

    /**
     * 获取所有元素
     * @param nameSpace
     * @param key
     * @return
     */
    Collection<Object> readAllSortedSet(String nameSpace, String key);

    /**
     * 获取所有元素
     * @param key
     * @return
     */
    default Collection<Object> readAllSortedSet(String key) {
        return readAllSortedSet(null, key);
    }

    /**
     * 判断是否空
     * @param nameSpace
     * @param key
     * @return
     */
    boolean isEmptySortedSet(String nameSpace, String key);

    /**
     * 判断是否空
     * @param key
     * @return
     */
    default boolean isEmptySortedSet(String key) {
        return isEmptySortedSet(null, key);
    }

    /**
     * 判断是否存在
     * @param nameSpace
     * @param key
     * @return
     */
    boolean isExistsSortedSet(String nameSpace, String key);

    /**
     * 判断是否存在
     * @param key
     * @return
     */
    default boolean isExistsSortedSet(String key) {
        return isExistsSortedSet(null, key);
    }

    /**
     * 获取第一个元素
     * @param nameSpace
     * @param key
     * @return
     */
    Object firstSortedSet(String nameSpace, String key);

    /**
     * 获取第一个元素
     * @param key
     * @return
     */
    default Object firstSortedSet(String key) {
        return firstSortedSet(null, key);
    }

    /**
     * 获取最后一个元素
     * @param nameSpace
     * @param key
     * @return
     */
    Object lastSortedSet(String nameSpace, String key);

    /**
     * 获取最后一个元素
     * @param key
     * @return
     */
    default Object lastSortedSet(String key) {
        return lastSortedSet(null, key);
    }

}
